package com.c2b.algorithm.leetcode.jzoffer;

/**
 * <a href="https://www.nowcoder.com/practice/4436c93e568c48f6b28ff436173b997f?tpId=13&tqId=2273153&ru=%2Fpractice%2F0c1b486d987b4269b398fee374584fc8&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&sourceUrl=">打印从1到最大的n位数</a>
 * <p>输入数字 n，按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3，则打印出 1、2、3 一直到最大的 3 位数 999。<br>
 * 1. 用返回一个整数列表来代替打印<br>
 * 2. n 为正整数，0 < n <= 5<br>
 * </p>
 * 输入：1 返回值：[1,2,3,4,5,6,7,8,9]<br>
 *
 * @author c2b
 * @since 2023/3/9 10:33
 */
public class JzOffer0017PrintNumbers_S {
    /**
     * 从1开始连乘10或者直接用次方计算10^n
     * 从1遍历到10^n−1，将所有数字顺序加入数组。
     */
    public int[] printNumbers(int n) {
        int count = 1;
        for (int i = 0; i < n; i++) {
            count *= 10;
        }
        //从1遍历到n+1位数的最小数字输出
        final int[] res = new int[count - 1];
        for (int i = 0; i < count - 1; i++) {
            res[i] = i + 1;
        }
        return res;
    }

    public static void main(String[] args) {
        JzOffer0017PrintNumbers_S jzOffer0017PrintNumbers = new JzOffer0017PrintNumbers_S();
        int[] ints = jzOffer0017PrintNumbers.printNumbers(1);
        for (int anInt : ints) {
            System.out.println(anInt);
        }
    }
}
